Method for providing load diffusion in data stream correlations

ABSTRACT

A computer implemented method for performing load diffusion to process data stream pairs. A data stream pair is received for correlation. The data stream pair is partitioned into portions to meet correlation constraints for correlating data in the data stream pair to form a partitioned data stream pair. The partitioned data stream pair is sent to a set of nodes for correlation processing to perform the load diffusion.

GOVERNMENT LICENSE RIGHTS

This invention was made with Government support under Contract No.: TIA H98230-04-3-0001 awarded by the U.S. Department of Defense. The Government has certain rights in this invention.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates generally to an improved data processing system, and in particular, to a method and apparatus for processing data streams. Still more particularly, the present invention relates to a method, apparatus, and computer usable program code for providing load diffusion to perform data stream correlations using a distributed stream processing system.

2. Description of the Related Art

Many emerging applications call for sophisticated real time processing of data streams. These applications are referred to as stream applications. Examples of stream applications include, for example, stock trading surveillance for fraud detection, network traffic monitoring for intrusion detection, sensor data analysis, and video surveillance. In these stream applications, data streams from external sources flow into a stream processing system, where the data streams are processed by different continuous query processing elements called “operators”. These processing elements or operators may take the form of software, hardware, or some combination thereof.

To support unbounded streams, the stream processing system associates a sliding window with each stream. The window contains the most recently arrived data items on the stream called tuples. A tuple is a set of values. The window can be time-based or tuple-based. A time based window may be, for example, tuples arriving in the last 10 minutes, while a tuple based window may be, for example, the last 1000 tuples. One of the important continuous query operators is sliding window join between two streams, streams S₁ and S₂. The output of this window join contains every pair of tuples from streams S₁ and S₂ that satisfies the join predicate and are simultaneously present in their respective windows.

The join predicate is a comparison function over one or more common attributes between two tuples. The basic join predicate is an equality comparison between two tuples s₁ and s₂ over a common attribute A, denoted by s₁·A=s₂·A. The sliding window join has many applications. For example, consider two streams in which one stream contains phone call records and the other stream contains stock trading records. A sliding window join that operates to correlate or join between the suspicious phone calls and anomalous trading records over the common attribute “trade identifier” can be used to generate trading fraud alerts.

In many cases, stream applications require immediate on-line results, which implies that query processing should use in-memory processing as much as possible. However, given high stream rates and large window sizes, even a single sliding window join operator can have a large memory requirement. Moreover, some query processing, such as video analysis can also be computation-intensive. Thus, a single server may not have sufficient resources to produce accurate join results while keeping up with high input rates. Currently, two basic solutions are present to address the challenge: shedding part of workload by providing approximate query results, or offloading part of workload to other servers.

Much work on stream processing has been performed to provide efficient resource management for a single server site. To further scale up stream processing, recent work has proposed to process high-volume data streams using distributed stream processing systems. This solution proposes a dynamic load distribution algorithm that provides coarse-grained load balancing at inter-operator level. However, the inter-operator load distribution alone may not be sufficient since this type of load distribution does not allow a single operator to collectively use resources on multiple servers. For example, if an operator requires 40 KB memory while each single server has only 39 KB available memory, the coarse-grained scheme cannot execute the operator with full precision although the whole server cluster has sufficient available memory. Another solution has studied the intra-operator load distribution for processing a single windowed aggregate operator on multiple servers.

Although load balancing and load sharing have been extensively studied in conventional distributed and parallel computing environments, they are not directly applicable to dynamic stream environments. First, stream processing system executes long-running query computations over unbounded data streams. Thus, any static load distribution algorithms cannot be used since load conditions can vary in unpredictable ways. Second, the load punctuation in the stream processing system is caused not only by different queries presented to the system, but also changing stream rates that can present transient spikes. Resource management must adapt to dynamic stream environments since the system cannot control the rates of input streams from external sources. Third, windowed stream joins require the load balancing algorithm to satisfy a new correlation constraint that correlated tuples must be sent to the same server for producing accurate join results. The correlated tuples include those tuples that need to be joined based on the sliding window definition.

SUMMARY OF THE INVENTION

The different aspects of the present invention provide a computer implemented method for performing load diffusion to perform correlations over two data streams using a distributed stream processing system. The data streams are dynamically partitioned and distributed among a set of server nodes to diffuse the stream correlation workload. The stream partition method satisfies the correlation constraint that the correlated data are guaranteed to sent to the same server node.

BRIEF DESCRIPTION OF THE DRAWINGS

The novel features believed characteristic of the invention are set forth in the appended claims. The invention itself, however, as well as a preferred mode of use, further objectives and advantages thereof, will best be understood by reference to the following detailed description of an illustrative embodiment when read in conjunction with the accompanying drawings, wherein:

FIG. 1 is a pictorial representation of a network of data processing systems in which aspects of the present invention may be implemented;

FIG. 2 is a block diagram of a data processing system in which aspects of the present invention may be implemented;

FIG. 3 is a diagram of a distributed stream processing system in accordance with an illustrative embodiment of the present invention;

FIG. 4 is a diagram of a sliding window stream join operator model in accordance with an illustrative embodiment of the present invention;

FIG. 5 is a flowchart of a sliding window stream join operation in accordance with an illustrative embodiment of the present invention;

FIG. 6 is a flowchart of a single stream partition process for diffusing the workload of the stream join operation in accordance with an illustrative embodiment of the present invention;

FIG. 7 is a diagram illustrating a coupled stream partition process for diffusing the workload of the stream join operation in accordance with an illustrative embodiment of the present invention;

FIG. 8 is a coupled stream partition process for diffusing the workload of the stream join operation in accordance with an illustrative embodiment of the present invention; and

FIG. 9 is a flowchart of a process for dynamically selecting stream partition strategies in accordance with an illustrative embodiment of the present invention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

FIGS. 1-2 are provided as exemplary diagrams of data processing environments in which embodiments of the present invention may be implemented. It should be appreciated that FIGS. 1-2 are only exemplary and are not intended to assert or imply any limitation with regard to the environments in which aspects or embodiments of the present invention may be implemented. Many modifications to the depicted environments may be made without departing from the spirit and scope of the present invention.

With reference now to the figures, FIG. 1 depicts a pictorial representation of a network of data processing systems in which aspects of the present invention may be implemented. Network data processing system 100 is a network of computers in which embodiments of the present invention may be implemented. Network data processing system 100 contains network 102, which is the medium used to provide communications links between various devices and computers connected together within network data processing system 100. Network 102 may include connections, such as wire, wireless communication links, or fiber optic cables.

In the depicted example, server 104 and cluster 106 connect to network 102 along with storage unit 108. In addition, clients 110, 112, and 114 connect to network 102. These clients 110, 112, and 114 may be, for example, personal computers or network computers. In the depicted example, server 104 and cluster 106 provide data, such as boot files, operating system images, and applications to clients 110, 112, and 114.

In particular, server 104 and cluster 106 work together to provide load diffusion for stream correlation or join operations. These streams are received from a client, such as client 110. Network data processing system 100 may include additional servers, clients, and other devices not shown.

In the depicted example, network data processing system 100 is the Internet with network 102 representing a worldwide collection of networks and gateways that use the Transmission Control Protocol/Internet Protocol (TCP/IP) suite of protocols to communicate with one another. At the heart of the Internet is a backbone of high-speed data communication lines between major nodes or host computers, consisting of thousands of commercial, government, educational and other computer systems that route data and messages. Of course, network data processing system 100 also may be implemented as a number of different types of networks, such as for example, an intranet, a local area network (LAN), or a wide area network (WAN). FIG. 1 is intended as an example, and not as an architectural limitation for different embodiments of the present invention.

With reference now to FIG. 2, a block diagram of a data processing system is shown in which aspects of the present invention may be implemented. Data processing system 200 is an example of a computer, such as server 104 or client 110 in FIG. 1, in which computer usable code or instructions implementing the processes for embodiments of the present invention may be located.

In the depicted example, data processing system 200 employs a hub architecture including north bridge and memory controller hub (MCH) 208 and south bridge and input/output (I/O) controller hub (ICH) 210. Processing unit 202, main memory 204, and graphics processor 218 are connected to north bridge and memory controller hub 208. Graphics processor 218 may be connected to north bridge and memory controller hub 208 through an accelerated graphics port (AGP).

In the depicted example, local area network (LAN) adapter 212, audio adapter 216, keyboard and mouse adapter 220, modem 222, read only memory (ROM) 224, hard disk drive (HDD) 226, CD-ROM drive 230, universal serial bus (USB) ports and other communications ports 232, and PCI/PCIe devices 234 connect to south bridge and I/O controller hub 210 through bus 238. PCI/PCIe devices may include, for example, Ethernet adapters, add-in cards and PC cards for notebook computers. PCI uses a card bus controller, while PCIe does not. ROM 224 may be, for example, a flash binary input/output system (BIOS).

Hard disk drive 226 and CD-ROM drive 230 connect to south bridge and I/O controller hub 210 through bus 240. Hard disk drive 226 and CD-ROM drive 230 may use, for example, an integrated drive electronics (IDE) or serial advanced technology attachment (SATA) interface. Super I/O (SIO) device 236 may be connected to south bridge and I/O controller hub 210.

An operating system runs on processing unit 202 and coordinates and provides control of various components within data processing system 200 in FIG. 2. As a client, the operating system may be a commercially available operating system such as Microsoft® Windows® XP (Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both). An object-oriented programming system, such as the Java™ programming system, may run in conjunction with the operating system and provides calls to the operating system from Java programs or applications executing on data processing system 200 (Java is a trademark of Sun Microsystems, Inc. in the United States, other countries, or both).

As a server, data processing system 200 may be, for example, an IBM eServer™ pSeries® computer system, running the Advanced Interactive Executive (AIX®) operating system or LINUX operating system (eServer, pSeries and AIX are trademarks of International Business Machines Corporation in the United States, other countries, or both while Linux is a trademark of Linus Torvalds in the United States, other countries, or both). Data processing system 200 may be a symmetric multiprocessor (SMP) system including a plurality of processors in processing unit 202. Alternatively, a single processor system may be employed.

Instructions for the operating system, the object-oriented programming system, and applications or programs are located on storage devices, such as hard disk drive 226, and may be loaded into main memory 204 for execution by processing unit 202. The processes for embodiments of the present invention are performed by processing unit 202 using computer usable program code, which may be located in a memory such as, for example, main memory 204, read only memory 224, or in one or more peripheral devices 226 and 230.

Those of ordinary skill in the art will appreciate that the hardware in FIGS. 1-2 may vary depending on the implementation. Other internal hardware or peripheral devices, such as flash memory, equivalent non-volatile memory, or optical disk drives and the like, may be used in addition to or in place of the hardware depicted in FIGS. 1-2. Also, the processes of the present invention may be applied to a multiprocessor data processing system.

In some illustrative examples, data processing system 200 may be a personal digital assistant (PDA), which is configured with flash memory to provide non-volatile memory for storing operating system files and/or user-generated data.

A bus system may be comprised of one or more buses, such as bus 238 or bus 240 as shown in FIG. 2. Of course the bus system may be implemented using any type of communications fabric or architecture that provides for a transfer of data between different components or devices attached to the fabric or architecture. A communications unit may include one or more devices used to transmit and receive data, such as modem 222 or network adapter 212 of FIG. 2. A memory may be, for example, main memory 204, read only memory 224, or a cache such as found in north bridge and memory controller hub 208 in FIG. 2. The depicted examples in FIGS. 1-2 and above-described examples are not meant to imply architectural limitations. For example, data processing system 200 also may be a tablet computer, laptop computer, or telephone device in addition to taking the form of a PDA.

The different aspects of the present invention focus on distributing the stream correlation workload among different servers. This approach involves an adaptive load diffusion scheme to efficiently execute sliding window stream joins (i.e., stream correlations) using a cluster of servers connected by high-speed networks. The different embodiments of the present invention consider both intra-operator and inter-operator load distribution, which are not taken into account by present available systems. The different aspects include supporting distributed executions of sliding window stream joins on a server cluster.

More specifically, aspects of the present invention provide a computer implemented method, apparatus, and computer usable program code for an adaptive load diffusion scheme to adaptively distribute stream join workload among a cluster of servers. The aspects of the present invention provide scalable stream joins by efficiently utilizing all available resources in a server cluster. A set of stream partition processes are used to continuously and adaptively diffuse stream processing workload among all servers.

In the different embodiments, the stream partition process dynamically splits an input stream into multiple logic streams, each of which only contains a subset of tuples of the original input stream. The tuples in these logic streams are routed to different servers for concurrent processing. Hence, each server only shares a partial workload because each server only processes a subset of tuples of the original stream. However, due to the correlation constraint, two joined streams cannot be partitioned independently. The stream partition processes used in the illustrative embodiments observe the correlation constraint using different schemes, such as replication and overlapped segmentation.

The illustrative embodiments first analyze the tradeoffs between different stream partition processes in terms of performance and overhead. Then, a set of adaptation strategies are employed to achieve adaptive load diffusion for dynamic stream environments.

In the illustrative examples, the load diffusion processes are implemented as a middleware proxy service. The load diffusion proxy service is implemented in the illustrative examples in a load diffusion proxy that virtualizes a cluster of stream processing servers into a unified stream processing service. The load diffusion proxy is designed for real-time on-line stream processing. The major operation performed by the load diffusion proxy is to route tuples to proper servers according to the load diffusion algorithm and the load conditions of different servers.

The load diffusion proxy is not a bottleneck of scalability because its function can be easily replicated, with the constraint that the pair of streams belonging to the same join operator passes through a single load diffusion proxy. In other words, although the illustrative examples depict a single load diffusion proxy, additional load diffusion proxies may be used depending on the implementation.

The load diffusion system of the present invention includes a distributed stream processing system architecture, a structure for the load diffusion middleware proxy, a stream processing model, and system monitoring schemes.

Turning now to FIG. 3, a diagram of a distributed stream processing system is illustrated in accordance with an illustrative embodiment of the present invention. Distributed stream processing system 300 is implemented using load diffusion proxy 302 and cluster 304. Load diffusion proxy 302 and cluster 304 are similar to server 104 and cluster 106 in FIG. 1. Cluster 304 contains servers 306, 308, 310, 312, 314, 316, 318, 320, and 322. The different servers shown in FIG. 3 may be implemented using a data processing system, such as data processing system 200 in FIG. 2.

In this example, 300 receives stream S₁ 322 and stream S₂ 324 for processing. In particular, these two streams are received for processing using a join operation to correlate the tuple pair on the stream S₁ 322 and stream S₂ 324 based on a predefined join predicate (e.g., equal value over a common attribute A between two tuples s₁ and s₂, denoted by s₁·A=s₂·A).

Each server node in cluster 304 has a limited memory capacity M_(i) for buffering tuples, and a certain processor processing speed that can process on average N_(i) join operations per time unit. Data streams are pushed into the distributed stream processing system from various external sources, such as, for example, temperature sensors, stock tickers, and video cameras. Distributed stream processing system 300 appears to a client as a unified stream processing service to serve a large number of continuous query processing over high volume data streams. This environment is a push-based stream environment in these examples and includes two unique features: (1) the tuples of a single stream can arrive in a bursty fashion; and (2) tuples are pushed into the system where data arrivals cannot be controlled by the system. A bursty arrival is, for example, a large number of tuples that arrive in a short period of time.

Load diffusion proxy 302 serves as a gateway of distributed stream processing system 300 to distribute stream processing workload across servers within cluster 304. Of course additional load diffusion proxies may be used in addition to load diffusion proxy 302, depending on the particular implementation. For each stream join request received from a client, load diffusion proxy 302 selects a number of servers to instantiate the join operator. The load diffusion proxy intercepts input streams and re-directs them to proper servers in cluster 304 responsible for handling the stream joins. Due to the memory and processor speed limits, a single server can only accommodate a certain data arrival rate in order to keep the unprocessed data in the memory. When tuples arrive too fast, the server has to drop tuples using some load shedding technique. However, dropping data can affect the accuracy of stream join results. In contrast, distributed stream processing system 300 avoids dropping data by spreading stream join workload across multiple servers within cluster 304.

The load diffusion proxy realizes fine-grained and balanced workload distribution using adaptive stream partitions. The stream partition process used in the different illustrative examples can adaptively split a high-volume stream into multiple logic streams, each of which are sent to different servers for concurrent processing. Conceptually, the load diffusion proxy decomposes a single resource-intensive join operator into multiple operators executed on different servers within cluster 304. Each operator only processes a subset of tuples on the original input streams.

For example, in FIG. 3, the load diffusion proxy splits the stream S₁ 324 into three logic streams, stream S_(1,1) 328, stream S_(1,2) 330, and stream S_(1,3) 322, that are sent to the servers 306, 308, and 316, respectively. Stream S₂ 326 is replicated to form stream S_(2,1) 334, stream S_(2,2) 336, and stream S_(2,3) 338. These replicated streams are sent to each of the servers. This type of partition is referred to as a single stream partition (SSP) process. Another type of partitioning process for load diffusion used in these illustrative examples is a coupled stream partition (CSP) process in which both streams are partitioned. Each stream has a lower stream rate than the original stream in these examples. Different from load distribution in traditional distributed computing environments, the load diffusion scheme of the present invention sends correlated data to the same server, which is called the correlation constraint. For example, if the load diffusion proxy sends the tuple s₁ on the first stream S₁ to a server node vi, all the tuples s₂ on the second stream S₂ within the sliding window [s₁·t−W₂, s₁·t+W₂] must be send to the same server node v_(i), where s₁·t denote the timestamp of the tuple s₁ and W₂ denote the sliding window size on the second stream S₂. By observing the correlation constraint, the load diffusion proxy maintains the accuracy of the stream join results.

For the different aspects of the present invention the stream processing model is implemented in distributed stream processing system 300 in FIG. 3. A data stream, denoted by S_(i), consists of a sequence of tuples denoted by s_(i)εS_(i). In a stream S_(i), a variable number of tuples arrive in each time unit. The time unit applies to any discrete time domain such as second or minute. In these examples, ri is used to denote the average arrival rate of the stream S_(i). In a dynamic stream environment, the average stream rate ri can change over time. An assumption is made that each tuple s_(i)χS_(i) carries a time-stamp s_(i)·t to denote the time when the tuple arrives on the stream S_(i). Si[W_(i)] is used to denote a sliding window on the stream Si, where W_(i) denotes the length of the window in time units. The depicted examples employ time-based windows. Tuple-based windows can be translated into time-based windows by assuming that a single tuple arrives every time unit. At a time t, s_(i) belongs to S_(i)[W_(i)] if s₁ arrives on S_(i) in the time interval [t−W_(i)·t]

Load diffusion proxy 302 adopts a two-level hierarchical approach to distributing workload among all servers within cluster 304. For each stream join request received, load diffusion proxy 302 first selects a server set, such as servers 306-322 for processing the data streams using a stream join operation. The server set is selected is based on the current load conditions of different servers. For example, we can allocate k least-loaded servers to each join operation, where k is a configurable system parameter. Each server node in the server set creates an instance of a join operator. Different join operators can have overlapped server sets, which allows the join operators to share resources on the same server. For example, in FIG. 3, two join operators J₃ and J₆ are concurrently running on the same server 318. For each tuple that arrives on a stream belonging to a join operator, load diffusion proxy 302 selects one server node from the server set according to different stream partition processes and the current load conditions of different server nodes in these illustrative examples.

Load diffusion proxy 302 can use different stream partition processes for different join operators. Load diffusion proxy 302 selects proper stream partition processes for each join operator J_(i)=S₁[W₁]

S₂[W₂] based on the properties of its input streams S₁ and S₂. Load diffusion proxy 302 can adaptively adjust algorithm parameters or switch algorithms when streams properties change.

For example, in FIG. 3, the join operator J₁ is instantiated on the server set containing servers 306, 308, and 316 and the join operator J₃ is instantiated on the server set containing servers 312 318, and 314. The load diffusion proxy can use different algorithms for diffusing the workload of J₁ and J₃. This hierarchical approach has two advantages. First, this approach allows each sliding window join operator to scale independently by adding more resources to its server set. Second, this approach allows each sliding window join operator to adapt independently to the changes of its joined streams. On the other hand, load diffusion proxy 302 still allows different operators to share resources on the same server by supporting overlapped server set.

Load diffusion proxy 302 virtualizes the collection of networked servers into a unified stream processing service. Load diffusion proxy 302 is designed to be fast, simple, and light-weight in these illustrative examples. These features are useful for real-time data stream processing. Load diffusion proxy 302 performs two operations in these examples: (1) maintains limited soft states (e.g., server loads, stream rates); and (2) routes tuples to proper servers. The examples assume that each tuple carries a time stamp and a stream identifier for use in processing by load diffusion proxy 302. The load diffusion proxy maintains a table that maps the stream identifier to the join operator J_(k) it belongs to.

The information about join J_(k) includes the set of servers responsible for handling J_(k) and the current stream partition process for diffusing the workload of J_(k). Compared to the resource-intensive stream join processing, the operation performed by the load diffusion proxy in the illustrative examples is simple and fast. Thus, load diffusion proxy 302 is not a bottleneck in a distributed stream processing system because the function load diffusion proxy 302 can be easily replicated on multiple physical hosts. With additional proxies the pair of streams belonging to the same join operator should pass through the same physical host for load diffusion.

Load diffusion proxy 302 maintains dynamic information about load conditions of different server nodes in cluster 304 and properties of input streams for efficient decision making. Each server in cluster 304 has a processor speed that can process at most N_(i) join operations per time unit. To keep track of processor load condition, each server records the number of join operations N′_(i) required by all the join operators on the server. In this manner, the server's processor load can be derived using the percentage N′_(i)/N_(i). For example, if a server can process 100 join operations per time unit and if all the operators on the server v_(i) require the processor to process 50 join operations per time unit, the server's processor load is 50 percent.

Besides monitoring processor usage, the load diffusion proxy 302 also monitors the memory usage of join operators instantiated on the different servers within cluster 304 in these illustrative examples. Each join operator is associated with two queues for buffering tuples arrived on the two joined streams. The lengths of queues reflect the memory requirement of the join operator, which are affected by the tuple arrival rates, processor processing rate, and the sliding window sizes. Since each server node can host multiple join operators, the queue length of a server node is defined as the sum of queue lengths of all the operators currently running on the server. Load diffusion proxy 302 maintains the processor and memory usage information of all server nodes. Each server is responsible for periodically refreshing its load condition soft states on the load diffusion proxy.

The load diffusion proxy also continuously monitors the tuple arrival rate of each input stream handled by 300. Because stream rates can dynamically vary over time, the load diffusion proxy performs periodical sampling to maintain updated average stream rate for each input stream. Specifically, load diffusion proxy 302 keeps a counter for each input stream to record the number of arrived tuples within a sampling period. The average arrival rate of the input stream can be estimated by dividing the counter value by the sampling period.

Turning to FIG. 4, a diagram of a sliding window stream join operator model is depicted in accordance with an illustrative embodiment of the present invention. The basic stream processing operator considered in this illustrative example is a sliding window symmetric join between two streams, stream S₁ 400 and stream S₂ 402, over a common attribute A, denoted by J_(i)=S₁[W₁]

S₂[W₂]. The join process for this join operator is shown as join operator 404. Join operator 404 is a symmetric example of a join operator such as those illustrated and described in FIG. 3. Join operator 404 uses windows W₁ 406 and W₂ 408 to perform a join operation.

The output of the join operation consists of all pairs of tuples s₁χS₁, s₂χS₂, such that s₁·A=s₂:A and s₂χS₂[W₂] at time s₁:t (i.e., s₂:tε[s₁:t−W₂; s₁·t]) or s₁εS₁[W₁] at time s₂·t (i.e., s₁·t C [s₂·t−W₁, s₂·t]) Each processing operation performed between the tuples on the two streams, streams S₁ 400 and S₂ 402, over a common attribute is one join operation. Join operator 404 maintains two queues, queue Q₁ 410, and queue Q₂ 412, for buffering incoming tuples from the streams S₁ 400 and S₂ 402, respectively.

When a new tuple s_(i)χS_(i); 1[i[2 arrives, this new tuple is inserted into the corresponding queue Q_(i) if queue Q_(i) is not full. Otherwise, the operator 404 either drops the newly arrived tuple or replace an old tuple in the buffer with the newly arrived tuple. The tuples in both queues, queue Q₁ 410, and queue Q₂ 412, are processed according to the temporal order, i.e., if s₁·tχQ₁<s₂·tχQ₂, s₁ is processed first. Each queue Q_(i), i=1, 2 maintains a pointer p_(i) to refer to the tuple currently processed by the join operator.

In this example, the sliding window join algorithm implemented in join operator 404 processes a tuple s₁χQ₁ by first updating Q₂ by removing expired tuples. A tuple s₂ is expired if (1) it arrives earlier than s₁·t−W₂ and (2) it has been processed by the join operator (i.e., p₂ points to a tuple arrived later than s₂). For example, in FIG. 4, join operator 404 is processing tuple 414, which arrived on the stream S₁ 400 at time 4. The window size of window W₂ 408 is 2 time units. Thus, the expired tuples include those tuples arrived on S₂ before time 2, such as tuples 416 and 418. These two tuples are deleted from queue Q₂ 412. Operator 404 produces join results between tuple S₁ and tuple S₂[W₂], denoted by s₁

S₂[W₂] by comparing s₁·A and s₂·A, . . . s₂χS₂[W₂]. Join operator 404 then updates the pointer p1 to refer to the next tuple in Q₁. Join operator 404 decide which tuple to process next by comparing s₁:t and s₂:t, where s₁ and s₂ are the tuples pointed by p₁ and p₂, respectively.

The join operation described in FIG. 4 is performed by multiple servers for the stream S₁ 400 and stream S₂ 402. This process occurs through different types of partitioning process. One partitioning scheme used in the illustrative examples, is a simple stream partition (SSP) process. This process the correlation constraint using replication. The basic idea is to replicate one of the two joined streams by sending each tuple of one of the streams to all servers allocated to the join operator. This stream is called the replicated stream. The other stream is then partition and its tuples are spread among all the servers. This stream is called the partitioned stream. The tuples of the partitioned stream are freely distributed because all the correlated tuples required by the partitioned stream are on the replicated stream, which have replicas on all servers.

With reference to FIG. 5, a flowchart of a sliding window stream join operation is depicted in accordance with an illustrative embodiment of the present invention. The process illustrated in FIG. 5 may be implemented in a join operator such as those depicted in cluster 304 in FIG. 3. In these examples, the processing is a join operation used to correlate or pair up tuples located in two streams.

The process begins by selecting a tuple in stream S₁ for processing (step 500). The selected tuple is compared with the tuple within the window in stream S₂ (step 502). A parameter is used to make the comparison in step 502. Next, a determination is made as to whether a match is present (step 504). If a match is present, the tuples are associated (step 506), with the process terminating thereafter. If a match is not present, a determination is made as to whether more tuples in the window are present (step 508). If more tuples in the window are not present, the process terminates. If more tuples in the window are present, the next tuple in the window is selected for processing (step 510), with the process returning to step 502 to compare the selected tuple with the tuple within the window in stream S₂.

With reference now to FIG. 6, a flowchart of a single stream partition process for diffusing the workload of the stream join operation is depicted in accordance with an illustrative embodiment of the present invention. The process illustrated FIG. 6 may be implemented in a load diffusion proxy, such as load diffusion proxy 302 in FIG. 3. This process is used to partition and distribute incoming data streams for processing.

The process begins by receiving tuples for joined streams S₁ and S₂ (step 600). One of these streams is selected for replication (step 602). Each tuple of the replicated stream is sent to all servers allocated to the join operator (step 604). The other stream is partitioned into portions (step 606). The tuples of the partitioned stream are distributed to the allocated servers (step 608). Next, a determination is made as to whether processing of the stream join operation is complete (step 610). This determination is made in these examples by seeing whether additional tuples are to be received for the streams.

If the joined streams are not complete, the process returns to step 600. Otherwise, the process terminates.

The following is a more detailed description verifying the single stream partition process used in the illustrative examples. In particular, consider a join operator J_(i)=S₁[W₁]

S₂[W₂] between the two streams S₁ and S₂ whose average arrival rates are r₁ and r₂, respectively. Suppose {v₁, . . . , v_(k)} is the server set allocated to the join operator J_(i). Assume that stream S₁ is the partitioned stream and stream S₂ is the replicated stream. For each tuple s₁ arriving at the stream S₁, the single stream partition process sends S₁ to the least-loaded server that has the lowest processor load. If two servers have the same processor load, the tie is broken using their queue lengths.

The server with shorter queue length is considered as the least-loaded server. For each tuple s₂ arriving at the stream S₂, the single stream partition process replicates s₂ into k copies that are sent to the k servers, respectively. By spreading the tuples of stream S₁ among all k servers, the workload of the join operator J_(i)=S₁[W₁]

S₂[W₂] is diffused among all k servers since each server only processes a subset of required join operations. The correctness of the single stream partition process that the diffused join operator executes the same set of join operations as the original join operator is proved. C(J_(i)) and C′(J_(i)) are used to denote the sets of join operations performed by the original join operator and by the diffused join operator, respectively. The correctness of the single stream partition process is proved by showing that C(J_(i))=C′(J_(i)).

Theorem 1. Let C(J_(i)) and C′(J_(i)) denote the sets of join operations performed by the original join operator and the new join operator diffused by the single stream partition process, respectively. C(J_(i))=C′(J_(i)).

Proof. First prove (1) C(J_(i))⊂C′(J_(i)) by showing that . . . s₁, if s₁

S₂[W₂]χC(J_(i)), then s₁·

S₂[W₂]2 C′(J_(i)), and . . . s₂, if s₂

S₁[W₁]2C(J_(i)), then s₂

S₁[W₁]χC′(J_(i)). Suppose the single stream partition process sends s₁ to the server v_(i). Because single stream partition replicates the stream S₂ on all servers, S₂[W₂] must be present on the server v_(i), too. Thus, s₁

S₂[W₂]χC′(J_(i)). Now prove . . . s₂, if s₂

S₁[W₁]χC(J_(i)), then s₂

S₁[W₁]χC′(J_(i)). For any s₂χS₂, s₂ needs to join every tuple in S₁[W₁]. Suppose single stream partition sends s₁χS[W₁] to the server v_(i). Because s₂ is also present at v_(i), s₂

s₁χC′(J_(i)) is present. By aggregating all the results of s₂

s₁; . . . s₁χS₁[W₁], s₂

S₁[W₁]χC′(J_(i)) is obtained. Thus, C(J_(i))⊂C′(J_(i)) is obtained.

Next, (2) C′(J_(i)) ⊂C(J_(i)) is proved by showing that . . . s₁, if s₁

S₂ [W₂]2C0(J_(i)), then s₁

S₂ [W₂]χC(J_(i)), and . . . s₂, if s₂

S₁[W₁]⊂C′(J_(i)), then s₂

S₁ [W₁]χC(J_(i)). The proof is straightforward since any join operation in C′(J_(i)) follows the windowed join definition, which thus should appear in C(J_(i)), too. Because . . . s₁χS₁, s₁ is only sent to one server, two different servers do not perform duplicated join operations. Thus, C′(J_(i)) ⊂C(J_(i)) is obtained. Combining (1) and (2), C(J_(i))=C′(J_(i)) is obtained.

The memory requirement of the windowed join operator J_(i)=S₁[W₁]

S₂[W₂] is analyzed. Without load diffusion, the original join operator is executed on a single server v_(i). Let σ denote the average tuple size. The server needs a minimum memory space for buffering the tuples in the two sliding windows S₁[W₁] and S₂[W₂], which can be calculated as follows, σ·(r ₁ ·W ₁ +r ₂ ·W ₂)  (1)

With load diffusion, the tuple arrival rate of the stream S₁ at each server is reduced to r₁/k. Thus, the minimum memory space for buffering the tuples in the sliding windows at a single server is reduced to

$\begin{matrix} {\sigma \cdot \left( {{\frac{r_{1}}{k} \cdot W_{1}} + {r_{2} \cdot W_{2}}} \right)} & (2) \end{matrix}$

Without load diffusion, the average number of tuples arrived at the server vi per time unit is r₁+r₂  (3)

The arrived tuples are buffered into the queues of v_(i). The lengths of the queues are constrained by the available memory space on v_(i). If the tuple arrival rate is higher than the processor processing rate, the tuples will be dropped when the queue is full. With load diffusion, the average number of tuples arrived at a single server is reduced to

$\begin{matrix} {\frac{r_{1}}{k} + r_{2}} & (4) \end{matrix}$

Now consider the processor requirement for processing stream joins. Without load diffusion, a single server needs to perform r₁·r₂·W₂ join operations for processing s₁χ_(A)S₂[W₂], for all tuples arrived on S₁ in this time unit, and r₂·r₁·W₁ for processing s₂χ_(A)S₁[W₁] for all tuples arrived on S₂ in this time unit. With load diffusion, each server only processes a subset of join operations. According to Theorem 1, the single stream partition process does not change the total number of join operations. Since the single stream partition process evenly spreads the workload among all k servers, the average number of join operations required by the join operator for a single server to process per time unit is

$\begin{matrix} \frac{r_{1} \cdot r_{2} \cdot \left( {W_{1} + W_{2}} \right)}{k} & (5) \end{matrix}$

The overhead of the single stream partition process is now analyzed. Since the single stream partition process replicates the stream S₂ and sends each tuple in the stream S₂ to all k servers, the load diffusion proxy pushes more tuples into the stream processing cluster than the original input streams, which is called overhead tuples. The number of overhead tuples generated by the single stream partition process per time unit is (k−1)·r₂  (6)

The number of overhead tuples is defined as the overhead of the single stream partition process because they bring extra memory and processor requirements to the whole server cluster for receiving those tuples.

Turning now to FIG. 7, a diagram illustrating partitioning of two streams for diffusing the workload of the stream join operation is depicted in accordance with an illustrative embodiment of the present invention. This load diffusion process is referred to as a coupled stream partition (CSP) process and simultaneously splits both streams S₁ 700 and S₂ 702 for spreading the workload among all servers allocated to the join operator.

The basic idea is to continuously partition both streams S₁ 700 and S₂ 702 into segments, each of which contains the tuples arrived within a certain time period. In this example, stream S₁ 700 is partitioned into segments 704, 706, and 708. These segments do not have an overlap. These non-overlapping segments are referred to as disjoint segments. In other words, a particular tuple is not found in more than one segment. As depicted, stream S₂ 702 is portioned into segments 710 and 712. These segments are overlapping segments. In other words, the overlapping segments contain common data. In particular, both segments 710 and 712 contain tuples 714, 716 and 718. In these examples, the overlap is identified based on the size of the windows that will be used for the join operation performed by an instance of a join operator on a server.

S₁(t, t+T) is used to denote a segment of stream S₁ 700 including all the tuples arrived on stream S₁ 700 between time t and t+T, where t is called the segment's start time and T is called the segment's length. Different from the sliding window S₁[W₁], each segment S₁(t,t+T) has fixed start time t and end time t+T.

The segments of stream S₁ 700 and stream S₂ 702 are matched into coupled segments based on their start time and end time. The coupled segments are then sent to the same server for producing join results. To meet the correlation constraint of the sliding window join, one of the two joined streams, stream S₁ 700 or stream S₂ 702 is partitioned into overlapped segments. In these examples, the overlap is illustrated in section 720 and contains tuples 714, 716, and 718. Thus, one of the two streams are partially replicated and the tuples are sent to multiple servers.

Turning now to FIG. 8, a coupled stream partition process for diffusing the workload of the stream join operation is depicted for distributing two data streams for joined operation processing in accordance with an illustrative embodiment of the present invention. The process illustrated in FIG. 8 may be implemented in a data processing system such as load diffusion proxy 302 in FIG. 3.

The process begins by receiving joined streams S₁ and S₂ (step 800). Tuples received for stream S₁ and stream S₂ are partitioned into segments (step 802). The segments are matched into coupled segments (step 804), and the coupled segments are distributed to allocated servers (step 806). A coupled segment is a segment that is associated with another segment for processing. Next, a determination is made as to whether stream join is complete (step 808). If the stream join is complete, the process terminates. Otherwise, the process returns to step 800 to receive additional tuples for the joined streams.

One implementation of the coupled stream partition process is described using an example. Consider a join operator J_(i)=S₁[W₁]

S₂[W₂] between the two streams S₁ 700 and S₂ 702. The average arrival rates of data for stream S₁ 700 and stream S₂ 702 are r₁ and r₂, respectively. Also assume that steam S₁ 700 has the non-overlapped segmentation that is called master stream and stream S₂ 702 has the overlapped segmentation that is called slave stream. Suppose the load diffusion proxy allocates k servers {v₁, . . . , v_(k)} to process the join operator J_(i). Let t denote the start time of the master streams current segment S₁(t; t+T). For all tuples arrived on the stream S₁ within the time period [t, t+T], the coupled stream partition process sends all these tuples to the same server v_(i) that is selected at time t. This server should be the least-loaded server at time t. At time t+T, the coupled stream partition process starts a new segment S(t+T; t+2T) for the master stream S₁. It then selects a new least-loaded server v_(j) at time t+T. The tuples belonging to the new segment are sent to this newly selected server v_(j). The coupled stream partition sends each tuple on the master stream, stream S₁ 700, only once since its segments do not have any overlap.

In contrast, the coupled stream partition process splits the slave stream, stream S₂ 702, into overlapped segments to meet the correlation constraint. If coupled stream partition sends the segment S₁(t; t+T) to the server v_(i), coupled stream partition needs to send the segment of the slave stream S₂(t−W₂;t+T+W₁) to the same server v_(i) to meet the correlation constraint. coupled stream partition process guarantees that the correlated data appears on the same server. Similarly, if coupled stream partition sends the master streams next segment S₁(t+T; t+2T) to the server v_(j), then coupled stream partition needs to send the slave stream's segment S₂(t+T−W₂; t+2T+W₁) to the same server v_(j). Thus, the tuples arrived on S₂ between the time period [t+T−W₂; t+T+W₁] are sent to both v_(i) and v_(j). The number of duplicated tuples is r₂·(W₁+W₂). For example, in FIG. 7, the load diffusion proxy sends the master stream's segment S₁(3; 5) 704 to the server v₁. Given W₁=1;W₂=2, coupled stream partition process also sends the slave stream's segment S₂(1; 6) 706 to server v₁. The coupled stream partition process diffuses the workload of the join operator J_(i) among all servers by distributing the tuples of both streams. Each server only shares a partial workload since each server only processes a subset of join operations.

The correctness of the coupled stream partition process that the diffused join operator executes the same set of join operations as the original join operator is proved as follows. C(J_(i)) and C′(J_(i)) is used to denote the sets of join operations performed by the original join operator and the diffused join operator, respectively. The correctness of the coupled stream partition process is proved by showing that C(J_(i))=C′(J_(i)).

Theorem 2. Let C(J_(i)) and C′(J_(i)) denote the sets of join operations performed by the original join operator and by the new join operator diffused by the coupled stream partition process, respectively. C(J_(i))=C′(J_(i)).

Proof. Prove (1) C(J_(i))⊂C′(J_(i)) by showing that (a) . . . s₁, if s₁

S₂ [W₂]χC(J_(i)), then s₁

S₂ [W₂]χC′(J_(i)), and (b) . . . s₂, if s₂

S₁[W₁]χC(J_(i)), then s₂

S₁[W₁]χC′(J_(i)). Prove (a) by showing that . . . s₁, if coupled stream partition sends s₁ to a server v_(i), then the coupled stream partition process sends . . . s₂χS₂[W₂] to v_(i) too. Suppose s₁χS₁(t, t+T). The coupled stream partition process sends S₂(t−W₂, t+T+W₁) to v_(i). According to the definition of S₂[W₂], s₂χS₂(s₁·t−W₂; s₁·t) is obtained. Because s₁·tχ[t, t+T], we have s₂χS₂(s₁·t−W₂, s₁·t)_S₂(t−W₂, t+T+W₁). Then, coupled stream partition also sends s₂ to v_(i). Thus, s₁

S₂[W₂]χC′(J_(i)) is obtained.

Then prove (b) by showing that . . . s₂ and . . . s₁χS₁[W₁], coupled stream partition sends a copy of s₂ on the machine where s₁ is sent. Suppose s₁ belongs to the segment S₁(t, t+T) and is sent to the server v_(i). According to the coupled stream partition process, the load diffusion proxy sends the segment S₂(t−W₂, t+T+W₁) to the same server v_(i). It is a goal to prove that s₂ belongs to the segment S₂(t−W₂, t+T+W₁). According to the definition of the sliding window S₁[W₁], s₂·t−W₁<s₁·t<s₂·t is present. Because s₁ belongs to the segment S₁(t; t+T), t<s₁·t<t+T is obtained. Thus, s₂·t>s₁·t>t and s₂·t<s₁·t+W₁<t+T+W₁ is present. Thus, s₂ belongs to the segment S₂(t−W₂, t+T+W₁), which is also sent to v_(i). Thus, s₂

S₁ [W₁]χC′(J_(i)), . . . s₂ is obtained Combining (a) and (b), C(J_(i))⊂C′(J_(i)) is obtained.

Then prove (2) C′(J_(i)) ⊂C(J_(i)). The proof is straightforward since any join operation in C′(J_(i)) follows the windowed join definition, which thus should appear in C(J_(i)), too. Moreover, since . . . s₁χS₁ does not appear on two different servers, coupled stream partition does not perform duplicated join operations. Thus, C′(J_(i)) ⊂C(J_(i)) is obtained. Combining (1) and (2), C(J_(i))=C′(J_(i)) is obtained.

The memory requirement of the coupled stream partition process for processing the windowed join operator J_(i)=S₁[W₁]

S₂[W₂] is analyzed. The coupled stream partition process evenly distributes both streams among all k servers. The average arrival rate of stream S₁ becomes

$\frac{r_{1}}{k}.$ For each segment [t, t+T], the coupled stream partition sends extra tuples on stream S₂ to meet the correlation constraint, whose number is r₂·(W₁+W₂). On average, the coupled stream partition process selects v_(i) once every k·T time. Thus, the average arrival rate of stream S₂ becomes

$\frac{r\; 2}{k} + {\frac{r\;{2 \cdot \left( {W_{1} + W_{2}} \right)}}{k \cdot T}.}$ Each server needs a minimum memory space to buffer the tuples of the two sliding windows S₁[W₁] and S₂[W₂], which can be calculated as follows, where a denotes the average tuple size,

$\begin{matrix} {{\sigma \cdot \frac{1}{k} \cdot \left( {{r_{1} \cdot W_{1}} + {r_{2} \cdot W_{2}}} \right)} + {\sigma \cdot \frac{r_{2}}{k} \cdot W_{2} \cdot \left( \frac{W_{1} + W_{2}}{T} \right)}} & (7) \end{matrix}$

Without load diffusion, the average tuple arrival rate is r₁+r₂. With load diffusion, the average number of tuples arrived at a single server per time unit is

$\begin{matrix} {\frac{r_{1}}{k} + \frac{r_{2}}{k} + {\frac{r_{2}}{k} \cdot \left( \frac{W_{1} + W_{2}}{T} \right)}} & (8) \end{matrix}$

Similar to the single stream partition process, the coupled stream partition process does not change the total number of join operations. Compared to the original join operator, the coupled stream partition process reduces the average number of join operations executed at each server to one k'th of the original required join operations.

In terms of the process overhead, the coupled stream partition process pushes more tuples into the server cluster due to the partial replication of the stream S₂. For each segment S₁(t, t+T) over the time period T, the coupled stream partition process introduces r₂·(W₁+W₂) more tuples than the original input streams S₁ and S₂. Thus, the number of extra tuples generated by the coupled stream partition process per time unit is

$\begin{matrix} \frac{r_{2} \cdot \left( {W_{1} + W_{2}} \right)}{T} & (9) \end{matrix}$

These extra tuples are defined as the overhead of the coupled stream partition process since they bring extra memory requirement for buffering tuples and extra CPU requirement for receiving tuples at each server.

With reference next to FIG. 9, a flowchart of a process for dynamically selecting stream partition strategies is depicted in accordance with an illustrative embodiment of the present invention. The process illustrated in FIG. 9 may be implemented in a load diffusion proxy, such as load diffusion proxy 302 in FIG. 3.

The process begins by monitoring load conditions for server nodes (step 900). The input stream properties are monitored (step 902). The servers needed to satisfy work load are identified (step 904). Stream partition strategies are selected to process the work load (step 906), with the process terminating thereafter.

Different load diffusion adaptation strategies may be implemented in load proxy server based on the analysis describe above. The load diffusion system adapts to dynamic stream environments at two different levels: (1) micro-adaptations within each algorithm by adjusting algorithm parameters and (2) macro-adaptations across algorithms by switching between different processes.

Micro-adaptation in single stream partition process may be used in these examples. The single stream partition process can evenly spread the number of join operations for processing a single windowed join operator J_(i)=S₁[W₁]

S₂[W₂] among all k servers. Theorem 1 shows that the single stream partition process does not introduce extra join operations. Each server shares a subset of the original join workload as described by Equation 5. Thus, as more servers are allocated to the join operator (i.e., k is larger), each server has a smaller workload. However, due to the full replication of stream S₂ at each server, the memory requirement reduction at each server is only related to the properties of the partitioned stream S₁. According to Equation 1 and Equation 2, the sliding window memory requirement reduction is proportional to the product r₁·W₁ and the number of servers k. According to Equation 3 and Equation 4, the tuple arrival rate reduction is proportional to r₁ and k. In contrast, the overhead of the single stream partition process is only related to the property of the replicated stream S₂. Equation 6 shows that the overhead of the single stream partition process is proportional to r₂ and k.

In a dynamic stream environment, the arrival rates of both streams can greatly change over time. The sliding window sizes can also change as the user updates the continuous query specifications. In order to maximize the memory requirement reduction and minimize algorithm overhead, the single stream partition process adaptively selects the stream that has larger value of r_(i)·W_(i), i=1; 2, as the partitioned stream, and the other stream as the replicated stream. The load diffusion proxy estimates the arrival rate of each stream by counting the number of arrived tuples on each stream within a sampling period. The average arrival rate of the input stream can be estimated by dividing the counted tuple number by the sampling period. In this manner, changes in the stream rate may be used to select which stream in a stream pair is the replicated stream and which stream is the partitioned stream. This selection may be made dynamically during processing of a stream pair. The process may make the partition stream the replicated stream in the middle of processing a stream pair

Micro-adaptation in the coupled stream partition process also may be used to dynamically adjust processing of streams to optimize performance. Similar to the single stream partition process, the coupled stream partition process can evenly spread the join operations for processing the windowed join operator J_(i)=S₁(W₁]

S₂[W₂] among all k servers. Theorem 2 shows that the coupled stream partition process does not introduce extra join operations while splitting both streams. However, different from the single stream partition process, the memory requirement reduction at each server is related to the properties of both streams since both of them are partitioned and distributed among k servers. According to Equation 1 and Equation 7, the sliding window memory requirement reduction by the coupled stream partition process is decided by the rates r₁, r₂ and sliding window sizes W₁;W₂ of both streams S₁ and S₂, the server number k, and the segment length T. Larger segment length T leads to more memory requirement reduction at each server. Equation 8 shows that the coupled stream partition process can reduce the arrival rates of both streams at each server. The more servers used (i.e., k is larger) and the larger the segment length T is, the more arrival rate reduction the coupled stream partition process achieves.

In contrast, the overhead of the coupled stream partition process, shown by Equation 9, is only related to r₂ since only stream S₂ is partially replicated on multiple servers. Since the overhead is proportional to r₂, the coupled stream partition process adaptively selects the slower stream as the slave stream and the faster stream as the master stream. Moreover, a larger segment length T means less overhead since the extra cost in the overlapped segmentation is amortized over a longer time period. The above analysis implies that the coupled stream partition process should use large segment length for reducing the overhead. However, on the other hand, a large segment length also means coarse-grained load distribution since a large number of tuples in two larger segments S(t, t+T) and S(t−W₂, t+T+W₁) are constrained to be sent to the same server. One extreme case is that if coupled stream partition process sets the segment length as infinite (i.e., T=∞), the join processing is reduced to non-diffused join operator where data streams are sent a single server.

Thus, the coupled stream partition process may adaptively adjust the segment length to adapt to dynamic stream environments for achieving the optimal performance. The performance of the load diffusion algorithm is evaluated using the throughput metric that is defined as the number of join operations performed by the whole server cluster over a period of time. Better load diffusion algorithm can achieve higher throughput for a given set of join operators and servers. Currently, the load diffusion proxy uses a simple sampling technique to find the optimal segment length for the coupled stream partition process. The load diffusion proxy starts from the base segment length T=1 and gradually increases T until the measured throughput decreases. The last sampled segment length is selected as the optimal segment length for the current system conditions. When the stream environment experiences significant changes (i.e., stream rate variations, server removals/additions), the load diffusion proxy triggers the above sampling process to find a new optimal segment length.

Macro-adaptation may be used to select different distribution processes, such as between the single stream partition process and the coupled stream partition process. The major difference between single stream partition process and coupled stream partition lies in (1) load balancing granularity and (2) process overhead. The single stream partition process can achieve the most fine-grained load balancing for the partitioned stream since it can route each tuple on the partitioned stream independently to any allocated server. In contrast, the coupled stream partition process distributes both streams with a certain granularity defined by the segment length T. A larger segment length T means coarser granularity since a bigger chunk of tuples is constrained to be sent to the same server. In terms of overhead comparison, the single stream partition process overhead is proportional to the server number k (Equation 6) while the overhead of the coupled stream partition process is independent of k (Equation 9). Thus, the coupled stream partition process should allow each join operator to access all servers in the computer cluster to fully utilize all available resources in the system. In contrast, the single stream partition process should use minimum number of servers for each join operator to avoid excessive overhead. In the following theorem,

Theorem 3, the single stream partition process has more overhead than the coupled stream partition process if

$k > {\frac{\left( {W_{1} + W_{2} + T} \right)}{T}.}$

Proof. According to Equation 6 and Equation 9, the single stream partition process has less overhead than the coupled stream partition process if

${\left( {k - 1} \right) \cdot r_{2}} > {\frac{\left( {W_{1} + W_{2}} \right)}{T} \cdot {r_{2}.}}$ Thus, the theorem holds. Theorem 3 indicates that the trade-off between single stream partition process and coupled stream partition depends only on the number of servers k, the sliding window sizes W₁ and W₂, and the segment length T. For example, if the workload of a join operator can be satisfied by a small number of servers, the sliding window sizes are big, and the segment length is small, the single stream partition process has less overhead than the coupled stream partition process. Otherwise, the coupled stream partition process is more cost-efficient. The load diffusion proxy adaptively switches between the single stream partition process and the coupled stream partition process based on Theorem 3.

Thus, the different aspects of the present invention provide a method, apparatus, and computer useable program code for efficiently processing stream joins using a cluster of servers. In the different illustrative examples, the load diffusion scheme is implemented as a middleware proxy service that employs a set of stream partition processes to adaptively diffuse stream join workload among distributed servers. To the best of our knowledge, this is the first work that studied distributed execution of stream joins using correlation-aware stream partitions. The examples use two stream partition processes, single stream partition (SSP) and coupled stream partition (CSP) for diffusing the workload of stream joins among distributed servers under the correlation constraint.

The invention can take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment containing both hardware and software elements. In a preferred embodiment, the invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc.

Furthermore, the invention can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device.

The medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk and an optical disk. Current examples of optical disks include compact disk—read only memory (CD-ROM), compact disk—read/write (CD-R/W) and DVD.

A data processing system suitable for storing and/or executing program code will include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution.

Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers.

Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modem and Ethernet cards are just a few of the currently available types of network adapters.

The description of the present invention has been presented for purposes of illustration and description, and is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art. For example, the illustrative examples are shown using single stream partition processes and couple stream partition processes. Other partition processes may be used that follow the constraints for processing pairs of streams. The embodiment was chosen and described in order to best explain the principles of the invention, the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated. 

1. A computer implemented method for providing load diffusion to perform a join operation over a data stream pair using a distributed stream processing system, the computer implemented method comprising: receiving the data stream pair for correlation, wherein the data stream pair comprises data, wherein the data are tuples, and wherein the data stream pair includes a first stream and a second stream; partitioning the data stream pair using correlation constraints to form a partitioned data stream pair, wherein the data stream pair is partitioned in a single stream partition process or a coupled stream partition process, wherein the single stream partition process further comprises: partitioning the first stream into portions; replicating the second stream on each node in a set of server nodes; distributing the portions to different nodes within the set of server nodes; and switching a replicated stream selection and a partitioned stream selection based on stream rate changes; wherein the coupled stream partition process further comprises: partitioning the first stream into disjoint segments; partitioning the second stream into overlapped segments; grouping the disjoint segments and the overlapped segments into coupled segments according to the correlation constraints; distributing the coupled segments among the set of server nodes; dynamically switching a master stream selection and a slave stream selection based on the stream rate changes; and adjusting a segment length based on changes in the set of server nodes processing the data stream pair; switching between the single stream partition process and the coupled stream partition process based on how many nodes in the set of server nodes, sliding window sizes, and the segment length; distributing the partitioned data stream pair among the set of server nodes for load diffusion; monitoring load conditions of nodes within the set of server nodes; and monitoring arrival rates of the data stream pair. 